namespace Beaker.Services.Locator
{
	/*
	[ContractClass( typeof( ServiceLocatorContracts ) )]
	public interface IServiceLocator
		: IServiceProvider
	{
		/// <summary>
		/// Get an instance of the given <paramref name="serviceType"/>.
		/// </summary>
		/// <param name="serviceType">Type of service requested.</param>
		/// <returns>The requested service instance.</returns>
		object GetInstance( Type serviceType );

		/// <summary>
		/// Get an instance of the given named <paramref name="serviceType"/>.
		/// </summary>
		/// <param name="serviceType">Type of object requested.</param>
		/// <param name="key">Name the object was registered with.</param>
		/// <returns>The requested service instance.</returns>
		object GetInstance( Type serviceType, string key );

		/// <summary>
		/// Get all instances of the given <paramref name="serviceType"/> currently
		/// registered in the container.
		/// </summary>
		/// <param name="serviceType">Type of object requested.</param>
		/// <returns>A sequence of instances of the requested <paramref name="serviceType"/>.</returns>
		IEnumerable GetAllInstances( Type serviceType );

		/// <summary>
		/// Get an instance of the given <typeparamref name="TService"/>.
		/// </summary>
		/// <typeparam name="TService">Type of object requested.</typeparam>
		/// <returns>The requested service instance.</returns>
		TService GetInstance<TService>();

		/// <summary>
		/// Get an instance of the given named <typeparamref name="TService"/>.
		/// </summary>
		/// <typeparam name="TService">Type of object requested.</typeparam>
		/// <param name="key">Name the object was registered with.</param>
		/// <returns>The requested service instance.</returns>
		TService GetInstance<TService>( string key );

		/// <summary>
		/// Get all instances of the given <typeparamref name="TService"/> currently
		/// registered in the container.
		/// </summary>
		/// <typeparam name="TService">Type of object requested.</typeparam>
		/// <returns>A sequence of instances of the requested <typeparamref name="TService"/>.</returns>
		IEnumerable<TService> GetAllInstances<TService>();
	}

	[ContractClassFor( typeof( IServiceLocator ) )]
	public abstract class ServiceLocatorContracts
		: IServiceLocator
	{
		public object GetService( Type serviceType )
		{
			Contract.Requires<ArgumentNullException>( serviceType != null );
			throw new NotImplementedException();
		}

		public object GetInstance( Type serviceType )
		{
			Contract.Requires<ArgumentNullException>( serviceType != null );
			throw new NotImplementedException();
		}

		public object GetInstance( Type serviceType, string key )
		{
			Contract.Requires<ArgumentNullException>( serviceType != null );
			Contract.Requires<ArgumentNullException>( key != null );
			throw new NotImplementedException();
		}

		public IEnumerable GetAllInstances( Type serviceType )
		{
			Contract.Requires<ArgumentNullException>( serviceType != null );
			Contract.Ensures( Contract.Result<IEnumerable>() != null );
			throw new NotImplementedException();
		}

		public TService GetInstance<TService>()
		{
			throw new NotImplementedException();
		}

		public TService GetInstance<TService>( string key )
		{
			Contract.Requires<ArgumentNullException>( key != null );
			throw new NotImplementedException();
		}

		public IEnumerable<TService> GetAllInstances<TService>()
		{
			Contract.Ensures( Contract.Result<IEnumerable<TService>>() != null );
			throw new NotImplementedException();
		}
	}
	 */
}